/* 
 * File:   Iterador.h
 * Author: mauro
 *
 * Created on 11 de septiembre de 2014, 01:14
 */

#ifndef ITERADOR_H
#define	ITERADOR_H
#include <stdbool.h>
#include <iostream>
#include "Nodo.h"
#include "Lista.h"
using namespace std;

/*Pregunta:
 * cuando creo el iterador, al template lo hago tipo class o typename??? que es lo correcto*/

template <class Tipo>
class Iterador {
private:
    Nodo <Tipo> *anterior;
    Nodo <Tipo> *actual;

public:
    /*constructor*/
    // Crea un iterador.
    // Pre: la lista fue creada.
    // Post: se creó un iterador que apunta hacia la primer
    // posición de la lista.
    Iterador();
    
    
    Iterador(Lista<Tipo> * lista);
    /*Setear Iterador a una lista*/
    void setIterador(Lista<Tipo>* lista);
    // El iterador avanza en una posición de la lista. Si la lista no tiene
    // elementos o el iterador se encuentra al final de ella, devuelve falso.
    // Pre: la lista y el iterador fueron creados.
    // Post: el iterador avanzó a la posición siguiente de ser posible.
    bool avanzar();
    //Mueve el iterador una cierta cantidad de espacios elegidos.
    bool moverIterA(int pos);
    // Da el valor de la posición donde se encuentra el iterador. Si dicha
    // posición está vacía, devuelve NULL.
    // Pre: la lista y el iterador fueron creados.
    // Post: se devolvió el valor de la posición donde se encuentra el iterador
    // o NULL, según corresponda.

    Nodo<Tipo> * verActual();
    // Devuelve verdadero si el iterador se encuentra al final de la lista,
    // falso en caso contrario.
    // Pre: la lista y el iterador fueron creados.
    bool alFinal();
    // Destruye el iterador.
    // Pre: el iterador fue creado.
    // Post: se destruyó el iterador.
    ~Iterador();



};

#endif	/* ITERADOR_H */

